<?php


class MenuDiasController extends AppController 
{
	public $uses = array('TipoComida','Comida','MenuDia','Sede','TipoMenu','ComidaMenu');	
	public $bandera = true; 
	
	#---------------------------------------------------#
	#---------------Funciones Principales---------------#
	#---------------------------------------------------#
	public function index()
	{
		$this->layout = 'default_ini';	
	}
	
	public function add_menu()
	{
		$this->layout = 'default_ini';	
		if ($this->request->data == null)
		{
			$this->set('valor',1);
			$this->set('ModoValor',1);
			
		}
		$this->infoMenu(0);
		
		if($this->request->is('post') )
		{
			$this->postAddMenu();
		}
	}
	public function consult_menu()
	{
		$this->layout = 'default_ini';	
		
		$this->setParametersConsult();
		
	
	}
	public function consult_menu1()
	{
		$this->layout = 'default_ini';	
		if ($id_tipo_menu == "")
		{
			$this->setMessageFlash(2, 'Error id_tipo_menu', null);
		}
		elseif ($id_sede == "")
		{
			$this->setMessageFlash(2, 'Error $id_sede', null);
		}
		elseif ($fecha_min == "") 
		{	
			$this->setMessageFlash(2, 'Error fecha_min', null);
		}
		elseif ($fecha_fin == "") 
		{
			$this->setMessageFlash(2, 'Error fecha_fin', null);	
		}
		else 
		{		
			$this->getConsult_Menu($id_tipo_menu,$id_sede,$fecha_min,$fecha_fin);
			
			if($this->request->is('post') || $this->request->is('put'))
			{
				
				$this->postConsultMenu();
			}
		}
		
	
	}
	
	public function edit_menu($id_menu)
	{
		$this->layout = 'default_ini';	
		if (!$id_menu)
		{
			$this->setMessageFlash(2, 'Error id_menu', null);
		}
		else 
		{
			$this->getDetail_Info_Menu($id_menu);
			
			if($this->request->is('post') || $this->request->is('put'))
			{
				$this->postEditMenu_1($id_menu);
			}
		}
		
	}
	
	public function detalle_menu($id_menu)
	{
		$this->layout = 'default_ini';	
		if (!$id_menu)
		{
			$this->setMessageFlash(2, 'Error id_menu', null);
		}
		else
		{
			$this->getDetail_Info_Menu($id_menu);
		}
		
	}
	
	public function delete_menu($id_menu,$id_val)
	{
		$this->layout = 'default_ini';	
		if (!$id_menu)
		{
			$this->setMessageFlash(2, 'Error id_menu null', null);	
		}
		elseif (!$id_val)
		{
			$this->setMessageFlash(2,'Error id_val null', null);
		}
		else
		{
			if ($id_val == 1)
			{
				if($this->delete_single_menu($id_menu))
				{
					$this->setMessageFlash(1, 'Se borro el menu satisfactoriamente', null);
				}
				else 
				{
					$this->setMessageFlash(2, 'No Se borro el menu satisfactoriamente', null);	
				}
			}
			elseif ($id_val == 2) 
			{
				if ($this->length_arreglo_menu($id_menu) > 2)
				{
					$this->delete_multiples_menu($id_menu);
				}
				elseif ($this->length_arreglo_menu($id_menu) == 2)
				{
					$menu = explode(',', $id_menu);
					if($this->delete_single_menu($menu[1]))
					{
						$this->setMessageFlash(1, 'Se borro el menu satisfactoriamente', null);
					}
					else 
					{
						$this->setMessageFlash(2, 'No Se borro el menu satisfactoriamente', null);
					}
				}
			}
			else 
			{
				$this->setMessageFlash(2, 'Error id_val', null);
			}
		}
		//$this->redirect($this->referer());
	}
	
	#---------------------------------------------------#
	#---------------Funciones Secundarias---------------#
	#---------------------------------------------------#
	
	public function setParametersConsult()
	{
		$this->llenar_combobox_sede(1);
		$this->llenar_combobox_menu(1);
				
		$this->set('fecha_inic', strtotime(date('Y-01-01')));
		$this->set('fecha_fin', strtotime(date('Y-12-31')));
	}
	
	public function setMessageFlash($id,$mensaje,$nombre_mensaje)
	{
		if (is_null($nombre_mensaje))
		{
			$nombre_mensaje = 'flash';
		}
		switch ($id) 
		{
			case 1: // mensaje bueno
				$this->Session->setFlash($mensaje,'default',array('class'=>'success'),$nombre_mensaje);
				break;
			case 2: // mensaje malo
				$this->Session->setFlash($mensaje,'default',array('class'=>'error-message'),$nombre_mensaje);
				break;
			case 3: // mensaje cuidado
				$this->Session->setFlash($mensaje,'default',array('class'=>'notice'),$nombre_mensaje);
				
				break;
			
			default:
				
				break;
		}
	}

	public function getDetalleMenu($id_menu)
	{
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->getDetail_Info_Menu($id_menu);
			$this->render('/Elements/GetDetalleMenu');
		}
	}
	
	public function getEditMenu($id_menu)
	{
		$this->layout = false;
		
		if ($this->request->is('get')) 
		{
			$this->getDetail_Info_Menu($id_menu);
			$this->render('/Elements/GetEditMenu');
		}
		elseif ($this->request->is('post') || $this->request->is('put') )
		{
			$this->postEditMenu();
		}
		
	}
	
	public function getGridConsultMenu($id_tipo_menu,$id_sede, $fecha_min, $fecha_fin)
	{
		
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->busqueda_menu($id_tipo_menu, $id_sede, $fecha_min, $fecha_fin);
			$this->render('/Elements/GridConsultMenu');
		}
		
	}
	
	private function length_arreglo_menu($arreglo_menu)
	{
		$menus = explode(',', $arreglo_menu);
		return count($menus);
	}
	
	private function delete_single_menu($id_menu)
	{
		return $this->eliminar_comida_menu($id_menu);
	}
	
	private function delete_multiples_menu($id_menus)
	{
		$menus = explode(',', $id_menus);
		
		foreach ($menus as $menu) 
		{
			if($menu != "")
			{
				try
				{
					$this->MenuDia->query('DELETE FROM MENU_DIAS WHERE ID='.$menu);

				}
				catch (Exception $e)
				{
					$this->setMessageFlash(2, 'no se pudo borrar el menu', null);
			
				}
			}
		}
	}
	
	private function postEditMenu_1($id_menu)
	{
		$fecha_menu = $this->request->data['menu_dias']['fecha_menu_dia'];
		$sede_id = $this->request->data['menu_dias']['sede_empresa'];
		$tipo_menu_id = $this->request->data['menu_dias']['tipo_menu_id'];
		$fecha_menu = date('Y-m-d',strtotime($fecha_menu));
		$arreglo_seleccionado = $this->request->data['menu_dias']['comida_seleccionada'];
		
		$this->editar_info_menu_1($id_menu, $fecha_menu, $sede_id, $tipo_menu_id, $arreglo_seleccionado);
	}
	
	private function postEditMenu()
	{
		debug($this->request->data);
		$fecha_menu = $this->request->data['fecha_menu_dia'];
		$sede_id = $this->request->data['sede_empresa'];
		$tipo_menu_id = $this->request->data['tipo_menu_id'];
		$fecha_menu = date('Y-m-d',strtotime($fecha_menu));
		$arreglo_seleccionado = $this->request->data['comida_seleccionada'];
		$id_menu = $this->request->data['id'];
		
		$this->editar_info_menu($id_menu, $fecha_menu, $sede_id, $tipo_menu_id, $arreglo_seleccionado);
		
	}
	
	private function postConsultMenu()
	{
		$id_tipo_menu = $this->request->data['Consult_Menu']['tipo_menu_id'];
		$id_sede =$this->request->data['Consult_Menu']['sede_empresa'];
		$fehca_inic =$this->request->data['Consult_Menu']['calendario_desde_fecha'];
		$fecha_fin =$this->request->data['Consult_Menu']['calendario_hasta_fecha'];
		
		$date_inic = strtotime($fehca_inic);
		$date_fin = strtotime($fecha_fin);
		
		if ($date_inic > $date_fin)
		{
			$this->setMessageFlash(2, 'La fecha de inicio no puede ser mayor que la fin', null);
		}
		else 
		{
			$this->redirect(array('action' => 'consult_menu',$id_tipo_menu,$id_sede,$date_inic,$date_fin));	
		}

		
		
	}
	
	private function eliminar_comida_menu($id_menu)
	{
		try
		{
			$this->MenuDia->query('DELETE FROM menu_dias WHERE id = '.$id_menu);
			return true;
		}
		catch (Exception $ee)
		{
			return false;
		}
		
		
	}
	
	private function getDetail_Info_Menu($id_menu)
	{
		$this->infoMenu($id_menu);
		
	}
	
	private function postConsutl_Menu()
	{
		$sede_seleccionado = 0 ;
		$tipo_menu_selecciondado = 0;
		$fecha_inic_seleccionado = 0;
		$fecha_fin_seleccioando = 0;
		
		
		$time_fecha_inic = strtotime($fecha_inic_seleccionado);
		$time_fecha_fin = strtotime($fecha_fin_seleccioando);
		
		$this->redirect(array('action' => 'consult_menu',$tipo_menu_selecciondado,$sede_seleccionado,$time_fecha_inic,$fecha_fin_seleccioando));
		
	}
	
	private function getConsult_Menu($id_tipo_menu,$id_sede,$fecha_min,$fecha_fin)
	{
		$this->llenar_combobox_sede(1);
		$this->llenar_combobox_menu(1);
		
		
		$this->busqueda_menu($id_tipo_menu, $id_sede, $fecha_min, $fecha_fin);
		
		
	}
	
	private function busqueda_menu($id_tipo_menu,$id_sede,$fecha_min,$fecha_fin)
	{
		$date_desde = date('Y/m/d',$fecha_min);
		$date_hasta = date('Y/m/d',$fecha_fin);
		$strquery = 'SELECT * 
						FROM menu_dias MD, sedes S, tipo_menus TM
						WHERE S.id = MD.sede_id 
						AND TM.id = MD.tipo_menu_id';
		if ($id_sede != 0)
		{
			$strquery = $strquery .' AND S.id = '.$id_sede;
		}
		if ($id_tipo_menu != 0)
		{
			$strquery = $strquery .' AND TM.id = '.$id_tipo_menu;
		}
		
		$strquery = $strquery . ' AND fecha_menu_dia BETWEEN "'.$date_desde.'" AND "'.$date_hasta.'"';	
		
		$strquery = $strquery . ' ORDER BY fecha_menu_dia ASC ';
		
		$Menu_Dias = $this->MenuDia->query($strquery);
		
		$this->set('Menu_Dias',$Menu_Dias);
		
		$this->set('id_tipo_menu',$id_tipo_menu);
		$this->set('id_sede',$id_sede);
		$this->set('id_fecha_min',$fecha_min);
		$this->set('id_fecha_fin',$fecha_fin);
	}

	private function postAddMenu()
	{
		$fecha_menu = $this->request->data['menu_dias']['fecha_menu_dia'];
		$sede_id = $this->request->data['menu_dias']['sede_empresa'];
		$tipo_menu_id = $this->request->data['menu_dias']['tipo_menu_id'];
		$fecha_menu = date('Y-m-d',strtotime($fecha_menu));
		$valor = $this->request->data['menu_dias']['valor_post'];
		$ModoValor = $this->request->data['menu_dias']['modo_valor'];
		
		if ($valor == 1)
		{
			$this->infoPostAddMenu($fecha_menu, $sede_id,$tipo_menu_id);
			$this->set('valor',2);
		}
		if ($valor == 2)
		{
			

			$arreglo_selecciondado = $this->request->data['menu_dias']['comida_seleccionada'];
			
				/*if ($ModoValor == 3)
				//if ($this->verificar_menu($fecha_menu, $sede_id, $tipo_menu_id))
				{
					//si existe el menu, solamente edita
					$this->editar_menu_viejo($fecha_menu, $sede_id, $tipo_menu_id, $arreglo_selecciondado);
					$this->setMessageFlash(2, 'Error fecha_fin', null);	(__('Se ha Editado el Menu Satisfactoriamente '));
					$this->redirect(array('action' => 'add_menu'));
				}
				elseif ($ModoValor == 2)
				{*/
					// si no existe el menu, lo agrega
					$this->guardar_menu_nuevo($fecha_menu,$sede_id,$tipo_menu_id,$arreglo_selecciondado);
					$this->setMessageFlash(1, 'Se ha Agregado el Menu Satisfactoriamente ', null);
					$this->redirect(array('action' => 'add_menu'));
				//}
		
			
			
			$this->set('valor',2);
			  
			 
			#$this->infoPostAddMenu($fecha_menu, $sede,$tipo_menu);
			
		}

	}
	
	private function guardar_menu_nuevo($fecha_menu,$sede_id,$tipo_menu_id,$arreglo_selecciondado)
	{
		$this->MenuDia->query('INSERT 
								INTO menu_dias(sede_id,fecha_menu_dia,tipo_menu_id) 
								VALUES ('.$sede_id.',"'.$fecha_menu.'",'.$tipo_menu_id.')');
		
		$id_menu = $this->MenuDia->query(
										   'SELECT id
											FROM menu_dias
											WHERE fecha_menu_dia =  "'.$fecha_menu.'"
											AND sede_id = '.$sede_id.'
											AND tipo_menu_id = '.$tipo_menu_id
										);
		
		if ($id_menu <= 0)
		{
			$this->setMessageFlash(2, 'Error Grave ID_MENU <= 0', null);
		}
		else 
		{
			$comidas = explode(',', $arreglo_selecciondado);
			foreach ($comidas as $comida) 
			{
				if ($comida != null)
				{
					$this->MenuDia->query(
											'INSERT 
												INTO comida_menus (menu_del_dia_id,comida_id) 
											 VALUES ('.$id_menu[0]['menu_dias']['id'].','.$comida.')'
										 );
				}
				
			}
		}
		
	}
	
	private function editar_info_menu($id_menu,$fecha_menu,$sede_id,$tipo_menu_id,$arreglo_selecciondado)
	{

		$this->MenuDia->query(
							   'DELETE FROM comida_menus 
								WHERE menu_del_dia_id = '.$id_menu
							 );
		
		
		
		$comidas = explode(',', $arreglo_selecciondado);
		foreach ($comidas as $comida) 
		{
			if ($comida != null)
			{
				$this->MenuDia->query(
										'INSERT 
											INTO comida_menus (menu_del_dia_id,comida_id) 
										 	VALUES ('.$id_menu.','.$comida.')'
									 );
				
			}
			
		}
		
		$this->setMessageFlash(1, "Se guardo los cambios realizados al menu", null);
		
		$this->redirect(array(
									'controller' => 'MenuDias',
									'action' => 'getEditMenu',$id_menu
							   )
						 );
		
	}
	
	private function editar_info_menu_1($id_menu,$fecha_menu,$sede_id,$tipo_menu_id,$arreglo_selecciondado)
	{

		$this->MenuDia->query(
							   'DELETE FROM comida_menus 
								WHERE menu_del_dia_id = '.$id_menu
							 );
		
		
		
		$comidas = explode(',', $arreglo_selecciondado);
		foreach ($comidas as $comida) 
		{
			if ($comida != null)
			{
				$this->MenuDia->query(
										'INSERT 
											INTO comida_menus (menu_del_dia_id,comida_id) 
										 	VALUES ('.$id_menu.','.$comida.')'
									 );
				
			}
			
		}
		
		$this->setMessageFlash(1, "Se guardo los cambios realizados al menu", null);
		
		$this->redirect(array(
									'controller' => 'MenuDias',
									'action' => 'index'
							   )
						 );
		
	}
	
	
	private function verificar_menu($fecha_menu,$sede,$tipo_menu)
	{
			
		
		$validacion = $this->MenuDia->query('SELECT *
												FROM menu_dias MD, comida_menus CM
												WHERE MD.id = CM.menu_del_dia_id
												AND MD.fecha_menu_dia = "'.$fecha_menu.'"
												AND MD.tipo_menu_id = '.$tipo_menu.'
												AND MD.sede_id = '.$sede);
		
		if ($validacion == NULL)
		{
			return false;
		}
		else 
		{
			return true;
		}
		
	}
	
	private function llenar_combobox_sede($id)
	{
		$sedes = $this->Sede->find('all');
		
		
		$arreglo = array();
		
		if ($id == 1)
		{
			array_push($arreglo, array( 0 => 'Todos'));
		}
		
		foreach ($sedes as $sede) 
		{
				array_push($arreglo, array( $sede['Sede']['id'] => $sede['Sede']['nombre_sede']));
		}
		
		$this->set('sedes',$arreglo);

	}
	
	private function postAddMenu1()
	{
		if ($this->MenuDia->save($this->request->data))
		{
			$this->setMessageFlash(1, 'Se guardar el menu', null);
		}
		else 
		{
			$this->setMessageFlash(2, 'No se pudo guardar el menu', null);
		}
	}
	
	private function llenar_combobox_menu($id)
	{
		$tipo_menus = $this->TipoMenu->find('all');
		

		$arreglo = array();
		if ($id == 1)
		{
			array_push($arreglo, array( 0 => 'Todos'));
		}
		foreach ($tipo_menus as $tipo_menu) 
		{
				array_push($arreglo, array( $tipo_menu['TipoMenu']['id'] => $tipo_menu['TipoMenu']['nombre_tipo_menu']));
		}
		
		$this->set('tipo_menus',$arreglo);
		
	}
	
	private function infoPostAddMenu($fecha_menu,$id_sede,$id_tipo_menu)
	{
		$Menu_del_Dias = $this->MenuDia->query('SELECT CM.comida_id, MD.id
													FROM menu_dias MD, comida_menus CM
													WHERE MD.sede_id = '.$id_sede.'
													AND MD.fecha_menu_dia =  "'.$fecha_menu.'"
													AND MD.tipo_menu_id = '.$id_tipo_menu.'
													AND MD.id = CM.menu_del_dia_id');
		
		
		$tipo_menu = $this->TipoMenu->findById($id_tipo_menu);
		$sede = $this->Sede->findById($id_sede);
		$this->set('tipo_menu_nombre',$tipo_menu['TipoMenu']['nombre_tipo_menu']);
		$this->set('sede_nombre',$sede['Sede']['nombre_sede']);
		$this->set('Menu_del_Dias',$Menu_del_Dias);
		$arreglo_de_comida = "";
		$this->set('arreglo_de_comida',$arreglo_de_comida);
		$this->set('fecha_menu',strtotime($fecha_menu));
		$this->set('id_tipo_menu',$id_tipo_menu);
		$this->set('id_sede',$id_sede);
		if($Menu_del_Dias != NULL)
		{
			$this->setMessageFlash(1, 'Existe Un Menu', null);
			$this->redirect(array('action' => 'edit_menu',$Menu_del_Dias[0]['MD']['id']));
			/*$this->set('ModoValor',3);
			foreach ($Menu_del_Dias as $Menu_del_Dia) 
			{
	
				$arreglo_de_comida = $arreglo_de_comida.','.$Menu_del_Dia['CM']['COMIDA_ID'];
	
			}*/

		}
		else 
		{
			$this->setMessageFlash(1, 'No Existe Un Menu, solo lo agregaras', null);
			$this->set('ModoValor',2);
		}
		
		
		
		
	}
	
	private function infoMenu($id_menu)
	{
		$this->llenar_combobox_sede(2);
		$this->llenar_combobox_menu(2);
		$Todos_Tipo_Comida = $this->TipoComida->find('all');
		$Todos_Comida = $this->Comida->find('all');
		
		
		if($id_menu != 0)
		{
			$Todos_Menu = $this->MenuDia->query('SELECT *
													FROM menu_dias MD, 
													tipo_menus TM, 
													sedes S,
													comida_menus CM
													WHERE TM.id = MD.tipo_menu_id
													AND S.id = MD.sede_id
													AND CM.menu_del_dia_id = MD.id
													AND	MD.id = '.$id_menu);
													
			$comidas_del_menu = $this->MenuDia->query('SELECT *
														FROM menu_dias MD, 
														comida_menus CM
														WHERE CM.menu_del_dia_id = MD.id
														AND MD.id = '.$id_menu);

			$id_tipo_menu = $Todos_Menu[0]['MD']['tipo_menu_id'];
			$id_sede = $Todos_Menu[0]['MD']['sede_id'];
			$fecha_menu = $Todos_Menu[0]['MD']['fecha_menu_dia'];
			
			$arreglo_de_comida ="";
			foreach ($comidas_del_menu as $comida_del_menu) 
			{
	
				$arreglo_de_comida = $arreglo_de_comida.','.$comida_del_menu['CM']['comida_id'];
				
	
			}
			$tipo_menu = $this->TipoMenu->findById($id_tipo_menu);
			$sede = $this->Sede->findById($id_sede);
			
			$this->set('comidas_del_menu',$comidas_del_menu);
			$this->set('id_menu',$id_menu);
			$this->set('tipo_menu_nombre',$tipo_menu['TipoMenu']['nombre_tipo_menu']);
			$this->set('sede_nombre',$sede['Sede']['nombre_sede']);

			$this->set('arreglo_de_comida',$arreglo_de_comida);
			$this->set('id_tipo_menu',$id_tipo_menu);
			$this->set('id_sede',$id_sede);
			$this->set('fecha_menu',strtotime($fecha_menu));
			
		}
		else 
		{
			$Todos_Menu = $this->MenuDia->find('all');
		}
		
		
		$Comida_Menu = $this->MenuDia->query('SELECT *
												FROM comida_menus CM
												WHERE menu_del_dia_id = '.$id_menu);
		$this->set('Comida_Menus',$Comida_Menu);
													
		$this->set('Todos_Tipo_Comidas',$Todos_Tipo_Comida);
		$this->set('Todos_Comidas',$Todos_Comida);
		$this->set('Todos_Menus',$Todos_Menu);
		
		

	}
	
}

?>